Eager Loading ব্যবহার করে Performance বৃদ্ধি

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework) Entity Framework এর Performance Optimization Techniques |
203
203

Eager Loading হলো একটি কৌশল যা Entity Framework (EF) এর মধ্যে সম্পর্কিত ডেটা লোড করার সময় একসাথে সমস্ত সম্পর্কিত ডেটা লোড করে। এটি পারফরম্যান্স বৃদ্ধি করতে সহায়ক হতে পারে কারণ এতে একাধিক ডেটাবেস রাউন্ড-ট্রিপ কমিয়ে আনা যায় এবং একটি মাত্র কুয়েরি দ্বারা সমস্ত প্রয়োজনীয় ডেটা একসাথে রিট্রাইভ করা হয়।

এটা Lazy Loading এবং Explicit Loading এর বিপরীতে কাজ করে, যেখানে Lazy Loading কেবল তখনই সম্পর্কিত ডেটা লোড করে যখন এটি প্রয়োজন হয় এবং Explicit Loading সম্পর্কিত ডেটা ম্যানুয়ালি লোড করতে হয়।


Eager Loading এর সুবিধা

  1. ডেটাবেস রাউন্ড-ট্রিপ কমানো: Eager Loading ব্যবহার করে, একাধিক সম্পর্কিত টেবিলের ডেটা একত্রে লোড করা হয়, যার ফলে একাধিক ডেটাবেস রাউন্ড-ট্রিপ কমে যায়।
  2. সম্পর্কিত ডেটা দ্রুত পাওয়া যায়: যখন আপনাকে সম্পর্কিত ডেটা একসাথে দেখতে হবে, তখন Eager Loading এর মাধ্যমে সব সম্পর্কিত ডেটা একসাথে রিট্রাইভ করা হয়, ফলে ডেটা পাওয়ার গতি বৃদ্ধি পায়।
  3. ন-১ সমস্যা (N+1 Problem) এড়ানো: N+1 সমস্যা তখন ঘটে যখন একটি মূল রেকর্ডের জন্য প্রতিবার সম্পর্কিত ডেটা আলাদা কুয়েরি করে রিট্রাইভ করা হয়। Eager Loading এই সমস্যা সমাধান করতে সাহায্য করে।

Eager Loading এর কনফিগারেশন

EF Core তে Eager Loading কনফিগার করার জন্য Include() মেথড ব্যবহার করা হয়। এটি আপনাকে সম্পর্কিত ডেটার সাথে Join করে একসাথে ডেটা লোড করতে সক্ষম করে।

উদাহরণ:

ধরা যাক, আপনার কাছে Customer এবং Order দুটি Entity রয়েছে, যেখানে One-to-Many সম্পর্ক আছে (একটি Customer এর একাধিক Order থাকতে পারে)। এখন আপনি Eager Loading ব্যবহার করে Customer এর সাথে সম্পর্কিত সমস্ত Order ডেটা একসাথে লোড করতে চান।

  1. Entity Classes:
public class Customer
{
    public int CustomerId { get; set; }
    public string Name { get; set; }

    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int OrderId { get; set; }
    public string OrderDetails { get; set; }

    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
}
  1. Eager Loading কনফিগারেশন:
var customers = dbContext.Customers
                         .Include(c => c.Orders) // Eager Loading
                         .ToList();

এখানে, Include(c => c.Orders) মেথডটি Customer Entity এর সাথে সম্পর্কিত সমস্ত Order ডেটা একসাথে লোড করে। ফলে, একবারের কুয়েরি দিয়েই সমস্ত Customer এবং তাদের Orders ডেটা লোড হয়ে যাবে।


Eager Loading এর উন্নত ব্যবহার

EF Core তে আপনি একাধিক সম্পর্ক একসাথে লোড করতে পারেন। যেমন, যদি Order Entity এর সাথে আরেকটি সম্পর্ক OrderDetails থাকে, তবে আপনি এই সম্পর্কটি Include এর মাধ্যমে একসাথে লোড করতে পারবেন।

উদাহরণ:

var customers = dbContext.Customers
                         .Include(c => c.Orders)         // Orders লোড করা
                         .ThenInclude(o => o.OrderDetails) // OrderDetails লোড করা
                         .ToList();

এখানে, ThenInclude মেথডটি প্রথমে Orders এর পর OrderDetails লোড করতে সাহায্য করছে। এর মাধ্যমে আপনি চেইনিং এর মাধ্যমে সম্পর্কিত অনেক গুলি Entity একসাথে লোড করতে পারবেন।


Eager Loading এর সাথে Best Practices

  1. প্রয়োজনীয় ডেটাই লোড করুন: যেকোনো সম্পর্কিত ডেটা লোড করার আগে নিশ্চিত করুন যে আপনি শুধুমাত্র প্রয়োজনীয় ডেটাই লোড করছেন। অতিরিক্ত ডেটা লোড করা পারফরম্যান্সে প্রভাব ফেলতে পারে।

    উদাহরণ:

    var customers = dbContext.Customers
                             .Include(c => c.Orders)
                             .Where(c => c.Name.StartsWith("A"))
                             .ToList();
    
  2. Include পরিমাণ সীমিত করুন: খুব বেশি সম্পর্ক একসাথে লোড করা আপনার কুয়েরি এবং ডেটাবেস পারফরম্যান্সকে ধীর করে দিতে পারে। তাই, প্রয়োজন অনুযায়ী Include এবং ThenInclude ব্যবহার করুন।
  3. No Tracking Queries: যদি আপনি কেবল ডেটা রিট্রাইভ করতে চান এবং কোন আপডেট করতে না চান, তাহলে AsNoTracking() মেথড ব্যবহার করা উচিত। এটি EF কে জানায় যে, ডেটাটি ট্র্যাক না করতে, ফলে পারফরম্যান্সে উন্নতি হয়।

    উদাহরণ:

    var customers = dbContext.Customers
                             .Include(c => c.Orders)
                             .AsNoTracking()
                             .ToList();
    

Eager Loading এবং Lazy Loading এর তুলনা

বিষয়Eager LoadingLazy Loading
কিভাবে কাজ করেএকসাথে সমস্ত সম্পর্কিত ডেটা লোড করে।ডেটা লোড করার সময় সম্পর্কিত ডেটা কেবল তখন লোড হয় যখন এটি প্রয়োজন হয়।
পারফরম্যান্সসাধারণত ভালো, কারণ একাধিক কুয়েরি কমে যায়।N+1 সমস্যা তৈরি করতে পারে এবং অতিরিক্ত রাউন্ড-ট্রিপ হতে পারে।
ব্যবহারযোগ্যতাএকাধিক সম্পর্ক একসাথে লোড করতে সুবিধাজনক।ব্যবহারকারীকে সম্পর্কিত ডেটার প্রাপ্যতা কন্ট্রোল করতে দেয়।

Eager Loading এর পারফরম্যান্স উপর প্রভাব

Eager Loading ব্যবহার করলে, একাধিক সম্পর্কের ডেটা একসাথে লোড করার কারণে ডেটাবেস থেকে কম রাউন্ড-ট্রিপ করতে হয়, ফলে অ্যাপ্লিকেশনের পারফরম্যান্স বাড়ে। তবে, যদি আপনি খুব বড় বা জটিল সম্পর্কের ডেটা লোড করেন, তাহলে মেমরি ব্যবহার বেড়ে যেতে পারে। তাই, যথাযথভাবে ডেটা লোড করা গুরুত্বপূর্ণ।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion